package com.mt.repair.dao.repairManagement;

import com.mt.common.core.web.base.PageDTO;
import com.mt.common.core.web.base.PageResultDTO;
import com.mt.repair.dto.repairManagement.CountOrderDto;
import com.mt.repair.dto.repairManagement.EchartPieDto;
import com.mt.repair.entity.repairManagement.RepairOrder;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

@Mapper
@Component(value = "repairOrderDao")
public interface RepairOrderDao {

    /**
    * 根据分页参数查询维修单集合
    *
    * @param pageDTO 分页条件
    */
    public List<RepairOrder> findRepairOrders(PageDTO pageDTO);

    /**
    * 查询全部维修单集合
    *
    */
    public List<RepairOrder> findAllRepairOrders();

    /**
    * 查询所有维修单集合(只提取ID 和 Name)
    *
    */
    public List<RepairOrder> findAllRepairOrdersWithIdName();

    /**
    * 根据名称查询维修单集合(只提取ID 和 Name)
    *
    * @param repairOrderName 名称
    */
    public List<RepairOrder> findRepairOrdersWithIdNameByName(@Param("repairOrderName") String repairOrderName);

    /**
    * 根据ID查询指定的维修单(只提取ID 和 Name)
    *
    * @param repairOrderId Id
    */
    public RepairOrder findRepairOrdersWithIdNameById(@Param(" repairOrderId") Long repairOrderId);

    /**
    * 根据分页参数查询维修单集合的数量
    *
    * @param pageDTO 分页条件
    */
    public Long findRepairOrderTotalCount(PageDTO pageDTO);

    /**
    * 根据ID查询指定的维修单
    *
    * @param repairOrderId Id
    */
    public RepairOrder findRepairOrder(@Param("repairOrderId") Long repairOrderId);

    /**
    * 根据ID查询指定的维修单(包含外键)
    *
    * @param repairOrderId Id
    */
    public RepairOrder findRepairOrderWithForeignName(@Param("repairOrderId") Long repairOrderId);

    /**
    * 新增维修单
    *
    * @param repairOrder 实体对象
    */
    public Long saveRepairOrder(RepairOrder repairOrder);

    /**
    * 更新维修单
    *
    * @param repairOrder 实体对象
    */
    public Long updateRepairOrder(RepairOrder repairOrder);

    /**
    * 根据ID删除维修单
    *
    * @param repairOrderId ID
    */
    public Long deleteRepairOrder(@Param("repairOrderId") Long repairOrderId);

    /**
     * 派单
     *
     * @param repairOrderId ID
     */
    void dispatch(@Param("userId") Long userId, @Param("repairOrderId") Long repairOrderId);

    void updateStatus(@Param("currentState") Integer currentState, @Param("status") String status, @Param("setTimeName") String setTimeName,@Param("repairOrderId")Long repairOrderId);

    List<CountOrderDto> countOrders(@Param("day") Integer day);

    List<EchartPieDto> countRepairDeviceType(@Param("day")Integer day);

    List<EchartPieDto> countRepairFaultTypeByDeviceType(@Param("day")Integer day, @Param("deviceType")String deviceType);

    Long findCountNotCompelateRepair(@Param("deviceId") Long deviceId,@Param("faultType") String faultType);
}
